Vue v-model Directive

ভিউ ভি-মডেল টিউটোরিয়াল শিখুন

Vue v-model Directive

প্লেইন জাভাস্ক্রিপ্টের তুলনায়, Vue-তে ফর্মগুলির সাথে কাজ করা সহজ কারণ ভি-মডেল উইজার্ড একইভাবে সমস্ত ধরণের ইনপুট উপাদানগুলির সাথে সংযোগ করে৷

ভি-মডেল ইনপুট উপাদানটি ভ্যালু ইনস্ট্যান্সে মান বৈশিষ্ট্য এবং ডেটা মানের মধ্যে একটি লিঙ্ক তৈরি করে। যখন আপনি ইনপুট পরিবর্তন করেন, ডেটা আপডেট হয় এবং যখন ডেটা পরিবর্তন হয়, ইনপুটটিও আপডেট হয় (টু-ওয়ে বাইন্ডিং)।

Two-way Binding

আগের পৃষ্ঠায় শপিং লিস্টের উদাহরণে যেমন দেখা গেছে, v-মডেল আমাদেরকে একটি দ্বি-মুখী বাইন্ডিং প্রদান করে, যার অর্থ হল ফর্ম ইনপুট উপাদানগুলি Vue ডেটা ইনস্ট্যান্স আপডেট করে এবং Vue পরিবর্তন ইনপুটগুলিকে ডেটা ইনস্ট্যান্সে আপডেট করে৷

নীচের উদাহরণটি ভি-মডেলের সাথে দ্বিমুখী আবদ্ধতা প্রদর্শন করে।

🎯 Example

দ্বি-মুখী বাইন্ডিং: ভিউ ডেটা অ্যাট্রিবিউট মান আপডেট হচ্ছে দেখতে ইনপুট ক্ষেত্রে লেখার চেষ্টা করুন। Vue ডেটা সম্পত্তির মান পরিবর্তন করতে কোডে সরাসরি লিখুন, কোডটি চালান এবং দেখুন কিভাবে ইনপুট ক্ষেত্র আপডেট করা হয়।

<div id="app">
  <input type="text" v-model="inpText">
  <p> {{ inpText }} </p>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  const app = Vue.createApp({
    data() {
      return {
        inpText: 'Initial text'
      }
    }
  })
  app.mount('#app')
</script>

💡দ্রষ্টব্য:

v-মডেল দ্বি-মুখী বাইন্ডিং ফাংশনটি আসলে v-bind:value এবং v-on:input এর সমন্বয়ে অর্জন করা যেতে পারে:

  • v-bind:Vue ইনস্ট্যান্স ডেটা থেকে ইনপুট উপাদান আপডেট করার জন্য মান,
  • এবং v-on:ইনপুট ইনপুট থেকে Vue ইনস্ট্যান্স ডেটা আপডেট করতে।

কিন্তু v-মডেল ব্যবহার করা অনেক সহজ, তাই আমরা সেটাই করব।

A Dynamic Checkbox

আমরা পূর্ববর্তী পৃষ্ঠায় আমাদের কেনাকাটার তালিকায় একটি চেকবক্স যুক্ত করি যাতে একটি আইটেম গুরুত্বপূর্ণ কি না তা নির্দেশ করে৷

চেকবক্সের পাশে আমরা একটি পাঠ্য যোগ করি যা সর্বদা বর্তমান 'গুরুত্বপূর্ণ' অবস্থাকে প্রতিফলিত করে, যা 'সত্য' বা 'মিথ্যা'-তে পরিবর্তিত হতে পারে।

আমরা ব্যবহারকারীর মিথস্ক্রিয়া উন্নত করতে এই গতিশীল চেকবক্স এবং পাঠ্য যোগ করতে v-মডেল ব্যবহার করি।

আমাদের প্রয়োজন:

নিচে 'গুরুত্বপূর্ণ' বৈশিষ্ট্যটি কেনাকাটার তালিকা থেকে বিচ্ছিন্ন দেখতে কেমন তা দেখায়।

🎯 Example

চেকবক্স পাঠকে গতিশীল করা হয়েছে যাতে পাঠ্যটি বর্তমান চেকবক্স ইনপুট মান প্রতিফলিত করে।

<div id="app">
  <form>
    <p>
      Important item?
      <label>
        <input type="checkbox" v-model="important">
        {{ important }}
      </label>
    </p>
  </form>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  const app = Vue.createApp({
    data() {
      return {
       important: false
      }
    }
  })
  app.mount('#app')
</script>

আমাদের কেনাকাটার তালিকা উদাহরণে এই গতিশীল বৈশিষ্ট্য যোগ করা যাক.

<div id="app">
  <form v-on:submit.prevent="addItem">
    <p>Add item</p>
    <p>Item name: <input type="text" required v-model="itemName"></p>
    <p>How many: <input type="number" v-model="itemNumber"></p>
    <p>
      Important?
      <label>
        <input type="checkbox" v-model="itemImportant">
        {{ important }}
      </label>
    </p>
    <button type="submit">Add item</button>
  </form>
  <hr>
  <p>Shopping list:</p>
  <ul>
    <li v-for="item in shoppingList">{{item.name}}, {{item.number}}</li>
  </ul>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  const app = Vue.createApp({
    data() {
      return {
        itemName: null,
        itemNumber: null,
        important: false,
        shoppingList: [
          { name: 'Tomatoes', number: 5, important: false }
        ]
      }
    },
    methods: {
      addItem() {
        let item = {
          name: this.itemName,
          number: this.itemNumber,
          important: this.itemImportant
        }
        this.shoppingList.push(item)
        this.itemName = null
        this.itemNumber = null
        this.itemImportant = false
      }
    }
  })
  app.mount('#app')
</script>

Mark Found Items in The Shopping List

আসুন একটি ফাংশন যোগ করি যা শপিং তালিকায় যোগ করা আইটেমগুলিকে পাওয়া হিসাবে চিহ্নিত করে।

আমাদের প্রয়োজন:

আমরা খুঁজে পাওয়া সমস্ত আইটেমগুলির সাথে একটি তালিকা তৈরি করি এবং পাওয়া আইটেমগুলিকে আন্ডারলাইন করে একটি তালিকা তৈরি করি৷ আপনি প্রকৃতপক্ষে প্রথম তালিকায় সমস্ত আইটেম এবং দ্বিতীয় তালিকায় সমস্ত আইটেম রাখতে পারেন এবং প্রথম বা দ্বিতীয় তালিকায় আইটেমটি দেখানো হবে কিনা তা নির্ধারণ করতে Vue ডেটা অ্যাট্রিবিউট 'found' সহ v-show ব্যবহার করতে পারেন।

🎯 Example

কেনাকাটার তালিকায় আইটেমগুলি যোগ করার পরে, আপনি আইটেমগুলি খুঁজে পাওয়ার পরে ক্লিক করে কেনাকাটা করার ভান করতে পারেন। আপনি যদি ভুলবশত কোনো আইটেমটিতে ক্লিক করেন, তাহলে 'নট ফাউন্ড' তালিকায় আইটেমটি নিতে আপনি আবার ক্লিক করতে পারেন।

<div id="app">
  <form v-on:submit.prevent="addItem">
    <p>Add item</p>
    <p>Item name: <input type="text" required v-model="itemName"></p>
    <p>How many: <input type="number" v-model="itemNumber"></p>
    <p>
      Important?
      <label>
        <input type="checkbox" v-model="itemImportant">
        {{ important }}
      </label>
    </p>
    <button type="submit">Add item</button>
  </form>

  <p><strong>Shopping list:</strong></p>
  <ul id="ulToFind">
    <li v-for="item in shoppingList"
        v-bind:class="{ impClass: item.important }"
        v-on:click="item.found=!item.found"
        v-show="!item.found">
          {{ item.name }}, {{ item.number}}
    </li>
  </ul>
  <ul id="ulFound">
    <li v-for="item in shoppingList"
        v-bind:class="{ impClass: item.important }"
        v-on:click="item.found=!item.found"
        v-show="item.found">
          {{ item.name }}, {{ item.number}}
    </li>
  </ul>

</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  const app = Vue.createApp({
    data() {
      return {
        itemName: null,
        itemNumber: null,
        important: false,
        shoppingList: [
          { name: 'Tomatoes', number: 5, important: false, found: false }
        ]
      }
    },
    methods: {
      addItem() {
        let item = {
          name: this.itemName,
          number: this.itemNumber,
          important: this.itemImportant,
          found: false
        }
        this.shoppingList.push(item)
        this.itemName = null
        this.itemNumber = null
        this.itemImportant = false
      }
    }
  })
  app.mount('#app')
</script>

Use v-model to make The Form Itself Dynamic

আপনি একটি ফর্ম তৈরি করতে পারেন যেখানে গ্রাহক একটি মেনু থেকে অর্ডার করতে পারেন। গ্রাহকের সুবিধার জন্য, গ্রাহক পানীয় অর্ডার করার পরেই আমরা পানীয় বেছে নেওয়ার প্রস্তাব দিই। এটি যুক্তি দেওয়া যেতে পারে যে গ্রাহককে একবারে সমস্ত মেনু আইটেম অফার করার চেয়ে এটি ভাল। এই উদাহরণে আমরা ফর্মটিকে গতিশীল করতে ভি-মডেল এবং ভি-শো ব্যবহার করি।

আমাদের প্রয়োজন:

🎯 Example

এই ফর্মটি গতিশীল। এটি ব্যবহারকারীর পছন্দের উপর ভিত্তি করে পরিবর্তিত হয়। অর্ডার বোতামটি দৃশ্যমান হওয়ার আগে এবং ব্যবহারকারী এটি অর্ডার করতে পারেন, ব্যবহারকারীকে প্রথমে বিভাগ, তারপর পণ্য এবং কতগুলি নির্বাচন করতে হবে।

Vue Exercises

দয়া করে সঠিক কোড প্রদান করুন যাতে ডিফল্ট ব্রাউজার রিফ্রেশ জমা দেওয়ার সময় ব্লক করা হয়।

এছাড়াও, কোড প্রদান করুন যাতে ইনপুট ক্ষেত্রের মানগুলি Vue ডেটা ইনস্ট্যান্স বৈশিষ্ট্য 'itemName' এবং 'itemNumber'-এর সাথে দ্বিমুখী আবদ্ধ থাকে।

Fill in the missing code:

<form v-on:_______="addItem">
  <p>Add item</p>
  <p>
    Item name: 
    <input type="text" required _______="itemName">
  </p>
  <p>
    How many: 
    <input type="number" _______="itemNumber">
  </p>
  <button type="submit">Add item</button>
</form>
submit.prevent, v-model, v-model
✓ ঠিক আছে! .prevent মডিফায়ার ব্রাউজারের ডিফল্ট ক্রিয়াকে বাধা দেয়, এবং v-মডেল দ্বি-মুখী বাইন্ডিং প্রদান করে
submit.stop, v-bind, v-bind
✗ ভুল! .stop ইভেন্ট প্রচার বন্ধ করে দেয়, v-bind শুধুমাত্র একমুখী বাঁধাই
click.prevent, v-model, v-bind
✗ ভুল! .prevent ক্লিকে কাজ করে না, এবং মিশ্র বাইন্ডিং সঠিক সমাধান নয়
submit.capture, v-on, v-on
✗ ভুল! .capture ক্যাপচার মোডের জন্য, ভি-অন ইভেন্ট পরিচালনা করে, বাঁধাই নয়